package com.one.group.admin.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.one.group.admin.service.impl.QuestionnaireSurveyServiceImpl;
import com.one.group.enums.ErrorCode;
import com.one.group.model.dto.QuestionnaireSurveyAddDto;
import com.one.group.model.dto.QuestionnaireSurveyQueryDto;
import com.one.group.model.dto.QuestionnaireSurveyUpdateDto;
import com.one.group.model.dto.QuestionnaireKeywordSearchDto;
import com.one.group.model.entity.QuestionnaireSurvey;
import com.one.group.model.vo.QuestionnaireSurveyListVo;
import com.one.group.result.Result;
import com.one.group.service.QuestionnaireSurveyService;
import com.one.group.utils.ResultUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 问卷Controller
 * @author kld
 */
@RestController
@RequestMapping("/questionnaire")
@Tag(name = "问卷管理")
public class QuestionnaireSurveyController {
    
    @Autowired
    private QuestionnaireSurveyService questionnaireSurveyService;
    
    /**
     * 新增问卷
     */
    @PostMapping("/add")
    @Operation(summary = "新增问卷")
    public Result add(@RequestBody QuestionnaireSurveyAddDto addDto) {
        // 参数校验
        if (addDto.getCellId() == null) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "小区不能为空");
        }
        if (addDto.getQuestionnaireName() == null || addDto.getQuestionnaireName().trim().isEmpty()) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "问卷名称不能为空");
        }
        if (addDto.getPublishTime() == null || addDto.getEndTime() == null) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "发布时间和结束时间不能为空");
        }
        if (addDto.getPublishTime().after(addDto.getEndTime())) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "发布时间不能晚于结束时间");
        }
        
        // 调用服务层新增问卷
        boolean result = questionnaireSurveyService.addQuestionnaire(addDto);
        
        if (result) {
            return ResultUtil.success("新增问卷成功");
        } else {
            return ResultUtil.error(ErrorCode.OPERATION_ERROR, "新增问卷失败");
        }
    }
    
    /**
     * 逻辑删除问卷
     * @param id 问卷ID
     * @return 删除结果
     */
    @PostMapping("/delete")
    @Operation(summary = "逻辑删除问卷")
    public Result delete(Long id) {
        // 参数校验
        if (id == null || id <= 0) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "问卷ID不能为空xx");
        }
        // 调用服务层删除问卷
        boolean result = questionnaireSurveyService.deleteQuestionnaire(id);
        
        if (result) {
            return ResultUtil.success("删除问卷成功");
        } else {
            return ResultUtil.error(ErrorCode.OPERATION_ERROR, "删除问卷失败或问卷不存在");
        }
    }
    
    /**
     * 获取问卷列表
     * @param queryDto 查询条件
     * @return 问卷列表数据
     */
    @PostMapping("/list")
    @Operation(summary = "获取问卷列表")
    public Result list(@RequestBody QuestionnaireSurveyQueryDto queryDto) {
        
        // 计算分页参数
        if (queryDto.getPage() == null || queryDto.getPage() <= 0) {
            queryDto.setPage(1);
        }
        if (queryDto.getLimit() == null || queryDto.getLimit() <= 0) {
            queryDto.setLimit(10);
        }
        
        // 设置分页条件
        PageHelper.startPage(queryDto.getPage(), queryDto.getLimit());
        
        // 查询数据
        List<QuestionnaireSurveyListVo> list = questionnaireSurveyService.findQuestionnaireByQueryDto(queryDto);
        
        // 获取分页信息
        PageInfo<QuestionnaireSurveyListVo> pageInfo = new PageInfo<>(list);
        
        return ResultUtil.success(pageInfo);
    }
    
    /**
     * 关键字搜索问卷
     * @param keywordSearchDto 关键字搜索条件
     * @return 问卷列表数据
     */
    @PostMapping("/findByKeyword")
    @Operation(summary = "关键字搜索问卷")
    public Result findByKeyword(@RequestBody QuestionnaireKeywordSearchDto keywordSearchDto) {
        
        // 计算分页参数
        if (keywordSearchDto.getPage() == null || keywordSearchDto.getPage() <= 0) {
            keywordSearchDto.setPage(1);
        }
        if (keywordSearchDto.getLimit() == null || keywordSearchDto.getLimit() <= 0) {
            keywordSearchDto.setLimit(10);
        }
        
        // 设置分页条件
        PageHelper.startPage(keywordSearchDto.getPage(), keywordSearchDto.getLimit());
        
        // 查询数据
        List<QuestionnaireSurveyListVo> list = questionnaireSurveyService.findQuestionnaireByKeyword(keywordSearchDto);
        
        // 获取分页信息
        PageInfo<QuestionnaireSurveyListVo> pageInfo = new PageInfo<>(list);
        
        return ResultUtil.success(pageInfo);
    }
    

    
    /**
     * 更新问卷
     * @param updateDto 问卷更新DTO
     * @return 是否更新成功
     */
    @PutMapping("/update")
    @Operation(summary = "更新问卷")
    public Result update(@RequestBody QuestionnaireSurveyUpdateDto updateDto) {
        // 参数校验
        if (updateDto.getId() == null || updateDto.getId() <= 0) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "问卷ID不能为空");
        }
        if (updateDto.getCellId() == null || updateDto.getCellId() <= 0) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "小区ID不能为空");
        }
        if (updateDto.getQuestionnaireName() == null || updateDto.getQuestionnaireName().trim().isEmpty()) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "问卷名称不能为空");
        }
        if (updateDto.getPublishTime() == null) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "发布时间不能为空");
        }
        if (updateDto.getEndTime() == null) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "结束时间不能为空");
        }
        if (updateDto.getPublishTime().after(updateDto.getEndTime())) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "发布时间不能晚于结束时间");
        }
        
        // 调用服务层更新问卷
        boolean result = questionnaireSurveyService.updateQuestionnaire(updateDto);
        
        if (result) {
            return ResultUtil.success("更新成功");
        } else {
            return ResultUtil.error(ErrorCode.OPERATION_ERROR, "更新失败或问卷不存在");
        }
    }
    
    /**
     * 获取问卷详情
     * @param id 问卷ID
     * @return 问卷详情
     */
    @GetMapping("/detail")
    @Operation(summary = "获取问卷详情")
    public Result detail(@RequestParam Long id) {
        // 参数校验
        if (id == null || id <= 0) {
            return ResultUtil.error(ErrorCode.PARAMS_ERROR, "问卷ID不能为空");
        }
        
        // 调用服务层获取问卷详情
        QuestionnaireSurvey questionnaire = questionnaireSurveyService.getById(id);
        
        if (questionnaire != null) {
            return ResultUtil.success(questionnaire);
        } else {
            return ResultUtil.error(ErrorCode.OPERATION_ERROR, "问卷不存在或不属于当前租户");
        }
    }
}